跳到主要内容

pyproject.toml 对 flet 构建命令的支持

· 阅读需 8 分钟
Feodor Fitsner
Flet 的创始人和开发者

随着时间的推移,flet build 命令的选项数量大幅增加,在命令行中携带所有这些设置变得不方便。

今天,我们很高兴地宣布另一个 Flet 预发布版本,现在可以在 pyproject.toml 中配置应用程序构建设置!

安装预发布版本

pip install flet==0.25.0.dev3526
备注

出于测试目的,我们建议在专用的 Python 虚拟环境中安装 Flet 预发布版本。

使用预发布版本构建应用程序

要使用 flet build 命令和 Flet 的预发布版本构建您的应用程序,请确保您的 requirements.txt 要么包含确切的版本说明符:

flet==0.25.0.dev3526

要么在 flet 依赖项之前加上 --pre 标志:

--pre
flet

快速开始

在您的 Flet 应用程序的根目录中创建以下最小的 pyproject.toml 文件,或者运行 flet create 从模板创建一个新的应用程序:

[project]
name = "my_app"
version = "1.0.0"
description = "我的第一个 Flet 项目"
authors = [
{name = "John Smith", email = "john@email.com"}
]
dependencies = ["flet==0.25.0.dev3526"]
备注

使用 pyproject.toml 后,您不再需要 requirements.txt。但是,如果应用程序目录中存在 requirements.txt 文件,flet build 命令将优先从该文件中读取依赖项,而不是从 pyproject.toml 中列出的依赖项。

[project]project.toml 的标准必填部分。

备注

Flet 还支持由 Poetry 创建的包含项目设置的 [tool.poetry] 部分。

flet build 命令也支持的 Poetry 的最小 pyproject.toml 如下:

[tool.poetry]
name = "my_app"
version = "1.0.0"
description = "我的第一个 Flet 项目"
authors = ["John Smith <john@email.com>"]

[tool.poetry.dependencies]
python = "^3.10"
flet = "0.25.0.dev3526"

project.name(或 tool.poetry.name)对应于 flet build 命令的 --project 选项,它将是应用程序包或可执行文件的名称。project.name 的值将进行“slugify”处理,其中所有非字母数字值将被替换为破折号 -

project.version(或 tool.poetry.version)对应于 --build-version 选项,它是一个 "x.y.z" 字符串的值,用作向用户显示的版本号。

project.description(或 tool.poetry.description)对应于 --description 选项,它是用于可执行文件或包的描述。

备注

project.authorstool.poetry.authors 不会被 flet build 使用,但这是标准和其他工具所要求的。

用 CLI 选项覆盖配置

pyproject.toml 中的所有设置都有相应的 flet build CLI 选项。如果您运行 flet build 命令并指定已经在 pyproject.toml 中配置的选项,CLI 选项的值将覆盖配置文件中的值。

项目依赖项

project.dependencies 部分列出项目依赖项。该值是一个带有类似 pip 的需求说明符的数组:

[project]
dependencies = [
"flet==0.25.0.dev3526",
"numpy"
]

产品信息

所有特定于 Flet 的设置都应放入 [tool.flet] 部分及其下面的子部分中。

产品信息设置补充了 [project] 部分中的设置,并允许配置应用程序包标识符和产品显示名称。

[tool.flet]
org = "com.mycompany" # --org
product = "产品名称" # --product
company = "我的公司" # --company
copyright = "版权所有 (C) 2024 年,我的公司" # --copyright
build_number = 1 # --build-number

应用程序包内容

以下设置控制 Python 应用程序归档的内容以及应用程序/包源的编译。

[tool.flet]
app.module = "main" # --模块名称
app.path = "src" # 相对于 `pyproject.toml` 的 Python 应用程序的路径
app.exclude = ["assets"] # --排除

compile.app = false # --编译应用程序
compile.packages = false # --编译包
compile.cleanup = false # --编译时清理

它们也可以在各自的子部分下写成如下形式:

[tool.flet.app]
module = "main"
path = "src"
exclude = ["assets"]

[tool.flet.compile]
app = false
packages = false
cleanup = false

启动画面(Splash)

[tool.flet.splash]
color = "" # --启动画面颜色
dark_color = "" # --深色启动画面颜色
web = false # --无网页启动画面
ios = false # --无 iOS 启动画面
android = false # --无 Android 启动画面

权限

[tool.flet]
permissions = ["camera", "microphone"] # --权限

深度链接

[tool.flet.deep_linking]
scheme = "https" # --深度链接方案
host = "mydomain.com" # --深度链接主机

Android 设置

[tool.flet.android]
adaptive_icon_background = "" # --Android 自适应图标背景
split_per_abi = false # --按 ABI 拆分

权限(注意键名周围的引号 "):

[tool.flet.android.permission]  # --Android 权限
"android.permission.CAMERA" = true
"android.permission.CAMERA" = true

功能(注意键名周围的引号 "):

[tool.flet.android.feature]  # --Android 功能
"android.hardware.camera" = false

Android 特定的深度链接:

[tool.flet.android.deep_linking]
scheme = "https" # --深度链接方案
host = "mydomain.com" # --深度链接主机

Android 捆绑包签名选项:

[tool.flet.android.signing]
# 可以使用 `--android-signing-key-store-password` 和 `--android-signing-key-password` 选项或
# FLET_ANDROID_SIGNING_KEY_STORE_PASSWORD 和 FLET_ANDROID_SIGNING_KEY_PASSWORD 环境变量传递存储和密钥密码。
key_store = "path/to/store.jks" # --Android 签名密钥存储
key_alias = "upload"

iOS 设置

[tool.flet.ios]
team = "team_id" # --团队

[tool.flet.ios.info] # --信息列表
NSCameraUsageDescription = "此应用程序使用相机来..."

[tool.flet.ios.info.deep_linking]
scheme = "https"
host = "mydomain.com"

macOS 设置

[tool.flet.macos]
entitlement."com.apple.security.personal-information.photos-library" = true
[tool.flet]
build_arch = "arm64" # --架构 - 如果未指定架构,Flet 将为 arm64 和 x86_64 架构构建通用包

Web 设置

[tool.flet.web]
base_url = "/" # --基础 URL
renderer = "canvaskit" # --Web 渲染器
use_color_emoji = false # --使用彩色表情符号
route_url_strategy = "path" # --路由 URL 策略

Flutter 设置

依赖项

flutter.dependencies = ["flet_video", "flet_audio"]  # --包含包

或者使用带有版本的替代语法:

[tool.flet.flutter.dependencies]
flet_video = "1.0.0"
flet_audio = "2.0.0"

或者使用磁盘上包的路径:

[tool.flet.flutter.dependencies.my_package]
path = "/path/to/my_package"

额外的构建参数

flutter.build_args = ["--some-flutter-arg"] # --Flutter 构建参数

额外的 pubspec.yaml 设置

允许将任意内容注入到生成的 pubspec.yaml 中,例如:

[tool.flet.flutter.pubspec.dependency_overrides]
web = "1.0.0"

自定义模板

[tool.flet.template]
path = "gh:some-github/repo" # --模板
dir = "" # --模板目录
ref = "" # --模板引用

就是这样!升级到 Flet 0.25.0.dev3526,尝试这个新功能并告诉我们您的想法! 干杯!